package controllers;

import interfaces.IAndamento;
import interfaces.IChamada;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;

import javax.faces.model.SelectItem;

import org.primefaces.event.SelectEvent;

import beans.Andamento;
import beans.Chamada;
import beans.Maquina;





@ManagedBean(name="chamadaController")
@SessionScoped
public class ChamadaController implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@EJB
	private IChamada chamadaEJB;
	
	@EJB
	private IAndamento andamentoEJB;
	
	private Chamada chamada = new Chamada();
	//private String data;
	private List<Chamada> chamadas = new ArrayList<Chamada>(); 
	private List<Chamada> chamadasUsuario = new ArrayList<Chamada>();
	private HtmlSelectOneMenu prioridades;
	private HtmlSelectOneMenu categorias;
	@ManagedProperty(value="#{UsuarioController}")
	private UsuarioController usuarioController;
	private Long totalChamadas;
	private Date data;
	private List<Andamento> andamentos = new ArrayList<Andamento>();
	
	
	public List<Chamada> getChamadasUsuario() {
		
		this.chamadasUsuario = chamadaEJB.SelectByUser(this.usuarioController.getUsuario());
		
		return chamadasUsuario;
	}

	
	public void cadastrarChamada(){
		
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		String dt = dateFormat.format(this.data);
		
		chamada.setData(dt);
		chamada.setUsuario(usuarioController.getUsuario());
		chamada.setCategoria(new String(categorias.getValue().toString()));
		chamada.setPrioridade(new String(prioridades.getValue().toString()));
		
		chamadaEJB.insert(chamada);
		this.chamada = new Chamada();
		this.categorias.setValue(null);
		this.prioridades.setValue(null);
		
		
	}
	
	//instanciar um novo objeto para inserir, retorna a pagina chamda.xhtml
	public String novaChamada(){
		this.chamada = new Chamada();
		return "chamada?faces-redirect=true";
	}
	
	public HtmlSelectOneMenu getPrioridades() {
		return prioridades;
	}

	public void setPrioridades(HtmlSelectOneMenu prioridades) {
		this.prioridades = prioridades;
	}

	public HtmlSelectOneMenu getCategorias() {
		return categorias;
	}

	public void setCategorias(HtmlSelectOneMenu categorias) {
		this.categorias = categorias;
	}

	public Chamada getChamada() {
		return chamada;
	}
	
	public void setChamadasUsuario(List<Chamada> c) {
		this.chamadasUsuario = c;
	}

	public List<Chamada> getChamadas() {
		
		this.chamadas = chamadaEJB.SelectAll();
		
		return chamadas;
	}

	public void setChamadas(List<Chamada> chamadas) {
		this.chamadas = chamadas;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public IChamada getChamadaEJB() {
		return chamadaEJB;
	}

	public void setChamadaEJB(IChamada chamadaEJB) {
		this.chamadaEJB = chamadaEJB;
	}

	public void setChamada(Chamada chamada) {
		this.chamada = chamada;
	}
	
	public List<SelectItem> getPrioridadesParaCombo(){
		List<SelectItem> lista = new ArrayList<SelectItem>();
		lista.add(new SelectItem("Alta"));
		lista.add(new SelectItem("Média"));
		lista.add(new SelectItem("Baixa"));
		
		return lista;
	}
	
	public List<SelectItem> getCategoriasParaCombo(){
		List<SelectItem> lista = new ArrayList<SelectItem>();
		lista.add(new SelectItem("Hardware"));
		lista.add(new SelectItem("Software"));
		lista.add(new SelectItem("Redes"));
		lista.add(new SelectItem("Impressão"));
		
		return lista;
	}
	


	public void setUsuarioController(UsuarioController usuarioController) {
		this.usuarioController = usuarioController;
	}
	
	public String onRowSelectNavigate(SelectEvent event) {  
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("chamada", event.getObject());  
  
        return "chamadaAndamento?faces-redirect=true";  
    }
	public String onRowSelectNavigateAdmin(SelectEvent event) {  
        FacesContext.getCurrentInstance().getExternalContext().getFlash().put("chamada", event.getObject());  
  
        return "chamadaAndamentoAdmin?faces-redirect=true";  
    }


	public Long getTotalChamadas() {
		this.totalChamadas =  chamadaEJB.totalChamada();
		return totalChamadas;
	}


	public void setTotalChamadas(Long totalChamadas) {
		this.totalChamadas = totalChamadas;
	}


	public void setAndamentoEJB(IAndamento andamentoEJB) {
		this.andamentoEJB = andamentoEJB;
	}


	public IAndamento getAndamentoEJB() {
		return andamentoEJB;
	}


	public void setAndamentos(Andamento a) {
		this.andamentos.add(a);
	}


	public List<Andamento> getAndamentos() {
		Chamada c = chamadaEJB.select(chamada.getIdchamada());
		for (Andamento a : c.getAndamentoList()){
			andamentos.add(a);
		}
		return andamentos;
	}
	
	
}

